;!function(w) {
    "use strict";
    
    var doc = document,
        query = "querySelectorAll",
        claName = "getElementsByClassName",
        S = function(s) {
            return doc[query](s);
        };

    // ئاساسى تەڭشەكلەرگە dir نى قوشۇش
    var config = {
        type: 0,
        shade: true,
        shadeClose: true,
        fixed: true,
        anim: "scale",
        dir: "rtl",  // rtl ياكى ltr
        theme: "light"  // light ياكى dark
    };

    var peri = {
        v: "1.0",
        index: 0,
        
        // ئاساسى تەڭشەكلەرنى كېڭەيتىش
        extend: function(opts) {
            var newOpts = JSON.parse(JSON.stringify(config));
            for (var key in opts) {
                newOpts[key] = opts[key];
            }
            return newOpts;
        },

        // ۋاقىت ۋە ئاخىرلاشتۇرۇش ساقلىغۇچ
        timer: {},
        end: {},
        
        // چېكىش ھەرىكىتىنى باشقۇرۇش
        touch: function(elem, fn) {
            elem.addEventListener("click", function(e) {
                fn.call(this, e);
            }, false);
        },

        // رامكىنى ئېچىش
        open: function(options) {
            var inst = new PeriBuild(options || {});
            return inst.index;
        },

        // رامكىنى تاقاش
        close: function(index) {
            var periElem = S("#peri-" + index)[0];
            if(!periElem) return;
            
            periElem.innerHTML = '';
            doc.body.removeChild(periElem);
            clearTimeout(peri.timer[index]);
            delete peri.timer[index];
            typeof peri.end[index] === 'function' && peri.end[index]();
            delete peri.end[index];
        },

        // بارلىق رامكىلارنى تاقاش
        closeAll: function() {
            var peris = doc[claName]("peri");
            for(var i = 0; i < peris.length; i++) {
                peri.close(peris[0].getAttribute("index"));
            }
        },

        // يېڭى ئىقتىدارلارنى قوشۇش
        toast: function(options) {
            if(typeof options === 'string') {
                options = {
                    content: options,
                    dir: 'ltr'
                };
            }
            var dir = options.dir || 'ltr';
            return peri.open({
                type: 'toast',
                content: options.content,
                skin: 'toast',
                time: options.time || 2,
                shade: false,
                anim: 'fade',
                dir: dir,
                success: function(elem) {
                    // dir خاسلىقىنى توغرا ئورۇنغا قويۇش
                    elem.setAttribute('dir', dir);
                }
            });
        },

        loading: function(options) {
            if(typeof options === 'string') {
                options = {
                    content: options,
                    dir: 'ltr'
                };
            }
            var dir = options.dir || 'ltr';
            return peri.open({
                type: 'loading',
                content: '<i></i>',
                shade: options.shade !== false,
                skin: 'loading',
                shadeClose: false,
                dir: dir,
                success: function(elem) {
                    // dir خاسلىقىنى توغرا ئورۇنغا قويۇش
                    elem.setAttribute('dir', dir);
                    elem.querySelector('.peri-content').setAttribute('data-text', options.content || 'يۈكلەۋاتىدۇ...');
                }
            });
        },

        photo: function(src, options) {
            options = options || {};
            return peri.open({
                type: 'photo',
                title: options.title,
                content: '<img src="' + src + '" style="max-width:100%;display:block;">',
                shade: true,
                shadeClose: true,
                skin: 'photo',
                anim: 'fade'
            });
        },

        steps: function(options) {
            var steps = options.steps || [];
            var currentStep = 0;
            var btnText = options.btnText || {
                next: 'كېيىنكى',
                prev: 'ئالدىنقى'
            };
            
            function showStep() {
                if(currentStep >= steps.length) {
                    options.finish && options.finish();
                    return;
                }
                
                var step = steps[currentStep];
                return peri.open({
                    title: step.title,
                    content: step.content,
                    btn: [btnText.next, btnText.prev],  // كۇنۇپكا تېكىستىنى تەڭشەش
                    dir: options.dir || 'rtl',
                    yes: function(index) {
                        peri.close(index);
                        currentStep++;
                        showStep();
                    },
                    no: function() {
                        if(currentStep > 0) {
                            currentStep--;
                            showStep();
                        }
                    }
                });
            }
            
            return showStep();
        }
    };

    // رامكا قۇرۇلمىسى
    var PeriBuild = function(options) {
        var that = this;
        that.config = peri.extend(options);
        that.view();
    };

    // تېما تەڭشەكلىرىنى قوشۇش
    var themes = {
        light: {
            background: '#fff',
            titleColor: '#262626',
            contentColor: '#595959',
            borderColor: 'rgba(0,0,0,0.06)',
            primaryBtn: '#1890ff',
            primaryBtnText: '#fff',
            secondaryBtn: '#f5f5f5',
            secondaryBtnText: '#666',
            boxShadow: '0 12px 32px rgba(0,0,0,0.1), 0 2px 6px rgba(0,0,0,0.08)'
        },
        dark: {
            background: '#1f1f1f',
            titleColor: '#fff',
            contentColor: '#d9d9d9',
            borderColor: 'rgba(255,255,255,0.08)',
            primaryBtn: '#177ddc',
            primaryBtnText: '#fff',
            secondaryBtn: '#2b2b2b',
            secondaryBtnText: '#d9d9d9',
            boxShadow: '0 12px 32px rgba(0,0,0,0.3), 0 2px 6px rgba(0,0,0,0.15)'
        }
    };

    // رامكا كۆرۈنۈشىنى قۇرۇش
    PeriBuild.prototype.view = function() {
        var that = this,
            config = that.config,
            theme = themes[config.theme || 'light'],
            periHtml = doc.createElement("div");
        
        that.id = periHtml.id = "peri-" + peri.index;
        periHtml.setAttribute("class", "peri peri-" + (config.type || 0));
        periHtml.setAttribute("index", peri.index);
        periHtml.setAttribute("dir", config.dir || "rtl");  // dir خاسلىقىنى قوشۇش

        // ماۋزۇ قۇرۇلمىسى
        var title = (function() {
            var isObj = typeof config.title === "object";
            return config.title ? 
                '<h3 style="'+ (isObj ? config.title[1] : "") +'">'+ 
                    (isObj ? config.title[0] : config.title) +
                '</h3>' : "";
        }());

        // كۇنۇپكا قۇرۇلمىسى
        var button = (function() {
            if(typeof config.btn === "string") {
                config.btn = [config.btn];
            }
            var btns = (config.btn || []).length, btnHtml = "";
            if(btns === 0) return "";
            
            // كۇنۇپكىلارنىڭ ئورنىنى تەڭشەش
            if(btns === 2) {
                if(config.btnAlign === 'right') {
                    // "ماقۇل" كۇنۇپكىسى ئوڭ تەرەپتە
                    btnHtml = '<span no type="0">'+ config.btn[1] +'</span>' + 
                             '<span yes type="1">'+ config.btn[0] +'</span>';
                } else {
                    // "ماقۇل" كۇنۇپكىسى سول تەرەپتە
                    btnHtml = '<span yes type="1">'+ config.btn[0] +'</span>' + 
                             '<span no type="0">'+ config.btn[1] +'</span>';
                }
            } else {
                btnHtml = '<span yes type="1">'+ config.btn[0] +'</span>';
            }
            return '<div class="peri-btn">'+ btnHtml +'</div>';
        }());

        // تېما ئۇسلۇبىنى قوشۇش
        var themeStyle = 
            'style="' +
            '--peri-bg:' + theme.background + ';' +
            '--peri-title:' + theme.titleColor + ';' +
            '--peri-content:' + theme.contentColor + ';' +
            '--peri-border:' + theme.borderColor + ';' +
            '--peri-primary:' + theme.primaryBtn + ';' +
            '--peri-primary-text:' + theme.primaryBtnText + ';' +
            '--peri-secondary:' + theme.secondaryBtn + ';' +
            '--peri-secondary-text:' + theme.secondaryBtnText + ';' +
            '--peri-shadow:' + theme.boxShadow + ';"';

        // رامكا مەزمۇن قۇرۇلمىسى
        periHtml.innerHTML = (config.shade ? 
            '<div class="peri-shade"></div>' : "") +
            '<div class="peri-main">' +
                '<div class="peri-section">' +
                    '<div class="peri-child '+ 
                        (config.skin ? "peri-" + config.skin + " " : "") +
                        (config.anim ? "peri-anim-" + config.anim : "") +'" ' + 
                        themeStyle + '>' +
                        title +
                        '<div class="peri-content">'+ config.content +'</div>' +
                        button +
                    '</div>' +
                '</div>' +
            '</div>';

        doc.body.appendChild(periHtml);
        var elem = that.elem = S("#" + that.id)[0];
        config.success && config.success(elem);
        that.index = peri.index++;
        that.action(config, elem);
    };

    // رامكا ھەرىكەتلىرىنى باشقۇرۇش
    PeriBuild.prototype.action = function(config, elem) {
        var that = this;

        // ۋاقىت بويىچە تاقاش
        if(config.time) {
            peri.timer[that.index] = setTimeout(function() {
                peri.close(that.index);
            }, config.time * 1000);
        }

        // كۇنۇپكا بېسىش ھەرىكىتى
        if(config.btn) {
            var btns = elem[claName]("peri-btn")[0].children;
            for(var i = 0; i < btns.length; i++) {
                peri.touch(btns[i], function() {
                    var type = this.getAttribute("type");
                    if(type == 0) {
                        config.no && config.no();
                        peri.close(that.index);
                    } else {
                        config.yes ? config.yes(that.index) : peri.close(that.index);
                    }
                });
            }
        }

        // سايە چېكىلگەندە تاقاش
        if(config.shade && config.shadeClose) {
            var shade = elem[claName]("peri-shade")[0];
            peri.touch(shade, function() {
                peri.close(that.index, config.end);
            });
        }

        config.end && (peri.end[that.index] = config.end);
    };
    
    w.peri = peri;
}(window);
